package models

import (
	"time"

	"gorm.io/gorm"
)

// UserRole 用户角色
type UserRole string

const (
	RoleEnterprise UserRole = "enterprise" // 企业
	RoleTutor      UserRole = "tutor"      // 导师
	RoleStudent    UserRole = "student"    // 学生
	RoleAdmin      UserRole = "admin"      // 管理员
)

// UserStatus 用户状态
type UserStatus string

const (
	StatusPending   UserStatus = "pending"   // 待审核
	StatusApproved  UserStatus = "approved"  // 已通过
	StatusRejected  UserStatus = "rejected"  // 已拒绝
	StatusSuspended UserStatus = "suspended" // 已暂停
)

// User 用户模型
type User struct {
	gorm.Model

	// 基础信息
	Username    string     `gorm:"uniqueIndex;size:50;not null" json:"username"`
	Email       string     `gorm:"uniqueIndex;size:100;not null" json:"email"`
	Password    string     `gorm:"size:255;not null" json:"-"`
	Phone       string     `gorm:"size:20" json:"phone"`
	Avatar      string     `gorm:"size:255" json:"avatar"`
	RealName    string     `gorm:"size:50;not null" json:"real_name"`
	Role        UserRole   `gorm:"size:20;not null" json:"role"`
	Status      UserStatus `gorm:"size:20;default:'pending'" json:"status"`
	LastLoginAt *time.Time `json:"last_login_at"`

	// 企业信息
	Enterprise *Enterprise `gorm:"foreignKey:UserID" json:"enterprise,omitempty"`

	// 导师信息
	Tutor *Tutor `gorm:"foreignKey:UserID" json:"tutor,omitempty"`

	// 学生信息
	Student *Student `gorm:"foreignKey:UserID" json:"student,omitempty"`

	// 关联数据
	Projects     []Project     `gorm:"foreignKey:CreatorID" json:"projects,omitempty"`
	Applications []Application `gorm:"foreignKey:ApplicantID" json:"applications,omitempty"`
}

// Enterprise 企业信息
type Enterprise struct {
	gorm.Model

	UserID          uint   `gorm:"uniqueIndex;not null" json:"user_id"`
	CompanyName     string `gorm:"size:100;not null" json:"company_name"`
	Industry        string `gorm:"size:50" json:"industry"`
	CompanySize     string `gorm:"size:20" json:"company_size"`
	BusinessLicense string `gorm:"size:255" json:"business_license"`
	ContactPerson   string `gorm:"size:50" json:"contact_person"`
	ContactPhone    string `gorm:"size:20" json:"contact_phone"`
	Address         string `gorm:"size:255" json:"address"`
	Description     string `gorm:"type:text" json:"description"`
	Website         string `gorm:"size:255" json:"website"`

	// 关联
	User User `gorm:"foreignKey:UserID" json:"user,omitempty"`
}

// Tutor 导师信息
type Tutor struct {
	gorm.Model

	UserID          uint   `gorm:"uniqueIndex;not null" json:"user_id"`
	PoliticalStatus string `gorm:"size:50" json:"political_status"`     // 政治面貌
	Title           string `gorm:"size:50" json:"title"`                // 职称
	Department      string `gorm:"size:100;not null" json:"department"` // 院系
	ResearchField   string `gorm:"size:100" json:"research_field"`      // 研究方向
	Education       string `gorm:"size:50" json:"education"`            // 学历
	Experience      string `gorm:"type:text" json:"experience"`         // 工作经历
	Publications    string `gorm:"type:text" json:"publications"`       // 发表论文
	Projects        string `gorm:"type:text" json:"projects"`           // 主持项目
	Awards          string `gorm:"type:text" json:"awards"`             // 获奖情况
	Introduction    string `gorm:"type:text" json:"introduction"`       // 个人简介

	// 关联
	User User `gorm:"foreignKey:UserID" json:"user,omitempty"`
}

// Student 学生信息
type Student struct {
	gorm.Model

	UserID          uint    `gorm:"uniqueIndex;not null" json:"user_id"`
	PoliticalStatus string  `gorm:"size:50" json:"political_status"`    // 政治面貌
	StudentID       string  `gorm:"size:20;not null" json:"student_id"` // 学号
	Major           string  `gorm:"size:100;not null" json:"major"`     // 专业
	Grade           string  `gorm:"size:20" json:"grade"`               // 年级
	Degree          string  `gorm:"size:20;not null" json:"degree"`     // 学位类型
	EnrollmentYear  int     `json:"enrollment_year"`                    // 入学年份
	GraduationYear  int     `json:"graduation_year"`                    // 毕业年份
	TutorID         *uint   `json:"tutor_id"`                           // 导师ID
	ResearchField   string  `gorm:"size:100" json:"research_field"`     // 研究方向
	GPA             float64 `gorm:"type:decimal(3,2)" json:"gpa"`       // GPA
	Skills          string  `gorm:"type:text" json:"skills"`            // 技能
	Experience      string  `gorm:"type:text" json:"experience"`        // 实习经历
	Projects        string  `gorm:"type:text" json:"projects"`          // 项目经历
	Awards          string  `gorm:"type:text" json:"awards"`            // 获奖情况
	Introduction    string  `gorm:"type:text" json:"introduction"`      // 个人简介

	// 关联
	User  User  `gorm:"foreignKey:UserID" json:"user,omitempty"`
	Tutor *User `gorm:"foreignKey:TutorID" json:"tutor,omitempty"`
}

// TableName 指定表名
func (User) TableName() string {
	return "users"
}

func (Enterprise) TableName() string {
	return "enterprises"
}

func (Tutor) TableName() string {
	return "tutors"
}

func (Student) TableName() string {
	return "students"
}
